<?php
/**
 * modificacion del charset
 * @version 1.1
 */
class database
{
	//Un enlace Persistente para las demas conexiones interna
	static private $conexion = null;
	//en esta variable almacenamos la ultima consulta para su posterior uso
	public $private_query_temp = null;
	static public function conectar($servidor,$usuario,$password,$nombre_de_base_de_datos)
	{
		// establecemos la conexion
		self::$conexion = mysql_connect($servidor,$usuario,$password);

		//Verificamos la conexion
		if(!is_resource(self::$conexion))
		{
			// de lo contrario lanzamos una excepcion
			throw new Exception('Imposible realizar la conexion al Servidor');
		}
		else
		{
			//si se realizo la conexion elegimos la Base de datos 
			mysql_select_db($nombre_de_base_de_datos,self::$conexion);
		}
	}
	static public function set_charset($string_charset ,$conexion_stream = false)
	{
		if($conexion_stream)
		{
			//hacemos la conexion con codificacion UTF8
			mysql_set_charset($string_charset ,$conexion_stream);
		}
		else
		{
			//hacemos la conexion con codificacion UTF8
			mysql_set_charset($string_charset,self::$conexion);
		}
	}
	public function query($consulta)
	{
		//hacemos la consulta y almacenamos el resultado
		$this->private_query_temp = mysql_query($consulta,self::$conexion);
		//var_dump($consulta);
		if($this->private_query_temp != true && !is_resource($this->private_query_temp))
		{
			//si no es un recurso entonces lanzamos una exception
			throw new Exception("La siguiente consulta no es valida : \n" . $consulta . 
			"\n" . @mysql_errno(self::$conexion) . ": " . @mysql_error(self::$conexion) );
			//throw new Exception(mysql_errno(self::$conexion) . ": " . mysql_error(self::$conexion) . "\n");
		}
		return $this->private_query_temp;
	}
	/**
	* fetch_assoc retorna los mismo parametros que el mysql_fetch_assoc
	* @param $resultado opcional si la consulta biene dada por otro enlace a mysql
	*/
	public function fetch_assoc($resultado = null)
	{
		$enlace = $resultado == null ? $this->private_query_temp : $resultado;
		if(!is_resource($enlace))
		{
			throw new Exception("No se hizo ninguna consulta SQL: <br/>\n");
		}
		else
		{
			return mysql_fetch_assoc($enlace);
		}
		return false;
	}
	/**
	* fetchAssoc retorna un booleano y su parametro tiene que ser una variable vacia ya que esta sera reemplazada por el valor
	* @param array $row esta contendra los valores ya que es una variable por referencia
	*/
	public function fetchAssoc(&$row)
	{
		$row = $this->fetch_assoc($this->private_query_temp);
		return is_array($row);
	}
	/**
	* fetch_object retorna los mismo parametros que el mysql_fetch_object y sus parametros sn equivalentes a esto
	* object mysql_fetch_object ( resource $result [, string $class_name [, array $params ]] )
	* object fetch_object  ( string $class_name [, array $param [, resource $result ]] )
	* @param $nombre_de_objecto nombre del objeto o clase
	* @param $param opcional si la consulta biene dada por otro enlace a mysql
	* @param $resultado tiene que ser un resource y que sea el resultado de un mysql_query
	*/
	public function fetch_object($nombre_de_objecto ,$param = null,$resultado = null)
	{
		$resultado = $resultado == null ? $this->private_query_temp : $resultado;
		if(!is_resource($resultado))
		{
			throw new Exception("No se hizo ninguna consulta SQL: <br/>\n");
		}
		else
		{
			$arg = array($resultado,$nombre_de_objecto,$param);
			if(null == $param){ unset($arg[2]);}
			return call_user_func_array('mysql_fetch_object',$arg);
			//return mysql_fetch_object($resultado,$nombre_de_objecto ,false );
		}
		return false;
	}
	/**
	* fetchAssoc retorna un booleano y su parametro tiene que ser una variable vacia ya que esta sera reemplazada por el valor
	* @param string $classname nombre de la clase a usarse
	* @param object $row esta contendra los valores ya que es una variable por referencia
	* @param array $param Los parametros para el constructor de la clase
	*/
	public function fetchObject($classname,&$row,$param = null)
	{
		$row = $this->fetch_object($classname,$param,$this->private_query_temp);
		return is_object($row);
	}
	public function affected_rows($link = null)
	{
		$link = $link == null ? self::$conexion : $link;
		
		return mysql_affected_rows($link);
	}
	public function num_rows($resultado = null)
	{
		$resultado = $resultado == null ? $this->private_query_temp : $resultado;
		return mysql_num_rows($resultado);
	}
	public function affectedRows(){return $this->affected_rows();}
	public function numRows(){return $this->num_rows();}
	public function free_result()
	{
		$link = $link == null ? self::$conexion : $link;
		return mysql_free_result($link);
	}
	static public function desconectar($link = null)
	{
		mysql_close($link == null? self::$conexion :$link);
	}
	static public function _($data)
	{
		return mysql_real_escape_string($data);
	}
}